package com.yonyou.train.dao;

import com.yonyou.train.model.Class;
import com.yonyou.train.model.Class_Sub;
import com.yonyou.train.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
public interface ReleaseCourseDao {
    //1.1.1
    List<Class> findClassesById(/*@Param("pageindex") int pageindex, @Param("pagesize") int pagesize, */@Param("token") long token);

    //1.1.2
    Class_Sub findSubClassesById(long id);

    //1.1.3  获取老师和助教的头像路径
    List<Map> getImg(@Param("teacherid") long teacherid, @Param("assistantid") long assistantid);

    //2.1.1
    void addClass(Class clas);

    //2.1.2    7.
    void addSubClasses(List<Class_Sub> subclasses);

    //3.1.1
    List<User> findAllUsers(/*@Param("pageindex") int pageindex, @Param("pagesize") int pagesize,*/ @Param("type") String type, @Param("search") String search);

    //3.1.2通过传入拼音查到的names查询对应人的信息
    List<User> findAllUsersByPY(@Param("type") String type, @Param("names") List<String> names);

    //4.1.1 根据主课程id获取主课程
    Class getClassById(long classid);

    //4.1.2 根据主课程id查询所有子课程
    List<Class_Sub> getSubClasses(long classid);

    //5.0 根据子课程id该子课程   6.
    Class_Sub findSubClassesBySubId(long subclassid);

    //5.1 根据子课程id获取报名人数
    int getClassMembers(long subclassid);

    //5.2 获取请假人数
    int getLeavers(long subclassid);

    //5.3 获取签到人数
    int getSigners(long subclassid);

    //6.通过子课程id删除classstudent表中所有有关信息
    void dropClassStudentInfo(Long subclassid);

    //6.1通过子课程id删除这门子课程
    void dropSubClassBySubId(long subclassid);

    //7.获取可能需要修改的子表对象集合
    List<Class_Sub> getSubClassId(long id);

    //7.2删除某主表的所有与子表课程有关的学员信息
    void deleteAllClassStudents(List<Long> ids);

    //7.3删除某主表的所需要删除的子表记录
    void deleteAllSubClasses(List<Long> ids);

    //7.4 更新主表信息
    void updateClass(Class cs);

    //    7.5批量更新子课程信息
    void updateSubClasses(List<Class_Sub> subclasses);

    //8.1 查看人员考勤信息
    List<Map> findAttInfo(/*@Param("pageindex") int pageindex, @Param("pagesize") int pagesize, */@Param("subclassid") Long subclassid, @Param("search") String search);

    //8.2 通过拼音查询人员考勤信息
    List<Map> findAttInfoByPY(@Param("subclassid") Long subclassid, @Param("names") List<String> names);

    //8.3 查看人员请假信息
    List<Map> findLeaInfo(/*@Param("pageindex") int pageindex, @Param("pagesize") int pagesize, */@Param("subclassid") Long subclassid, @Param("search") String search);

    //8.4 通过拼音查看人员请假信息
    List<Map> findLeaInfoByPY(@Param("subclassid") Long subclassid, @Param("names") List<String> names);

    //9.1 通过传入的userid数组修改其为请假状态
    void updateLeaState(@Param("userids") List<Long> userids, @Param("subclassid") long subclassid);

    //9
    int findStateOfSign(@Param("userids") List<Long> userids, @Param("subclassid") long subclassid);

    //10.1 根据主课程id删除class_student表中的相关信息
    void dropCourse_clastu(long classid);

    // 10.2  根据主课程id删除class_sub表中的相关数据
    void dropCourse_clasub(long classid);

    //10.3 根据主课程id删除class表中的相关数据
    void dropCourse_class(long classid);



}
